package com.itcam;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

/**
 * @author : Cammy.Wu
 * Description : 初识 X 光扫描仪（反射基础）
 */

public class Demo01 {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
        // 通过类的全限定名获取对应的 Class 对象
        Class<?> clazz = Class.forName("com.itcam.BlockBox");
        // 创建指定类的一个新实例，注意：newInstance() 方法在 Java 9 及以后版本已被弃用
//        Object box = clazz.newInstance();
        Object box = clazz.getDeclaredConstructor().newInstance();

        // 获取指定类中名为 "secret" 的字段对象
        Field field = clazz.getDeclaredField("secret");
        // 设置该字段可访问，以便可以访问私有字段
        field.setAccessible(true);
        // 打印出该字段的值
        System.out.println("扫描到秘密：" + field.get(box));
    }


}

/**
 * 加密的 "黑匣子" 类
 */
class BlockBox {
    private String secret = "宝藏位置：42.3601°N,71.0589°W";

    private void revealSecret() {
        System.out.println(secret);
    }
}

